#!/usr/bin/env python 
# -*- coding:utf-8 -*-
import qrcode
from PIL import Image

'''
version: 一个整数，范围为1到40，表示二维码的大小（最小值是1，是个12×12的矩阵），如果想让程序自动生成，将值设置为 None 并使用 fit=True 参数即可。
error_correction: 二维码的纠错范围，可以选择4个常量：
··1. ERROR_CORRECT_L 7%以下的错误会被纠正
··2. ERROR_CORRECT_M (default) 15%以下的错误会被纠正
··3. ERROR_CORRECT_Q 25 %以下的错误会被纠正
··4. ERROR_CORRECT_H. 30%以下的错误会被纠正
boxsize: 每个点（方块）中的像素个数
border: 二维码距图像外围边框距离，默认为4，而且相关规定最小为4
'''

def getQRCode(data, file_name):
    qr = qrcode.QRCode(
        version=1,
        error_correction = qrcode.constants.ERROR_CORRECT_H,
        box_size=10,
        border=4
    )
    #传入数据
    qr.add_data(data)
    qr.make(fit=True)
    #生成二维码
    img = qr.make_image(fill_color="green", back_color="white")
    #添加logo
    icon = Image.open('qr.jpg')
    print(icon)
    img_w, img_h = img.size
    factor = 6
    size_w = int(img_w/factor)
    size_h = int(img_h/factor)
    icon_w, icon_h = icon.size

    if icon_w > size_w:
        icon_w = size_w
    if icon_h > size_h:
        icon_h = size_h
    icon = icon.resize((icon_w, icon_h), Image.Resampling.LANCZOS)
    # 得到画图的的x，y坐标，居中显示
    w = int((img_w - icon_w) / 2)
    h = int((img_h - icon_h) / 2)
    # 黏贴logo照
    img.paste(icon, (w, h), mask=None)
    # 终端显示图片
    # plt.imshow(img)
    # plt.show()
    # 保存img
    img.save(file_name)
    return img
    #预览二维码
    # img.show()

if __name__ == '__main__':
    data = 'hello qr'
    img_path = '1.jpg'
    getQRCode(data, img_path)

